/*
    1. 定义枚举类，枚举出日志等级
    2. 提供转换接口：将枚举转换为对应字符串
*/

//防止头文件重复包含
#ifndef __M_LEVEL_H__
#define __M_LEVEL_H__

#define CLR_CLR     "\033[0m\033[0K" //默认颜色
#define CLR_RED     "\033[1;31m"
#define CLR_GREEN   "\033[1;32m"
#define CLR_YELLOW  "\033[1;33m"
#define CLR_CYAN    "\033[1;36m"
#define CLR_WHITE   "\033[1;37m"
#define CLR_RED_WHT "\033[1;41;37m"

namespace superlog
{
    class LogLevel
    {
    public:
        enum class value
        {
            UNKNOWN = 0,
            DEBUG,
            INFO,
            WARN,
            ERROR,
            FATAL,
            OFF
        };

        // 这个接口没有什么对象传递，所以定义为静态成员函数，这样就可以直接通过类名进行作用域的限定来调用接口
        static const char* toString(value level)
        {
            switch(level)
            {
                case value::DEBUG: return "DEBUG";
                case value::INFO: return "INFO";
                case value::WARN: return "WARN";
                case value::ERROR: return "ERROR";
                case value::FATAL: return "FATAL";
                case value::OFF: return "OFF";
                default: return "UNKNOWN";
            }
        }

        // 根据日志级别设置标准输出时的文字颜色
        static const char* setColor(value level)
        {
            switch(level)
            {
                case value::DEBUG: return CLR_CYAN;     //青色
                case value::INFO: return CLR_GREEN;     //绿色
                case value::WARN: return CLR_YELLOW;    //黄色
                case value::ERROR: return CLR_RED;      //红色
                case value::FATAL: return CLR_RED_WHT;  //红底白字
                case value::OFF: return CLR_WHITE;      //白色
                default: return CLR_CLR;
            }
        }
    };
}

#endif